﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataObjects;
using System.Data.SqlClient;
using InfrastructureSqlServer.Helpers;
using System.Configuration;
using System.Data;

namespace DataAccess
{
    public class CaixaOperacaoDAO
    {
        private List<CaixaOperacao> CarregarListaCaixaOperacao(SqlDataReader dr)
        {
            List<CaixaOperacao> liCaixaOperacao = new List<CaixaOperacao>();

            while (dr.Read())
            {
                CaixaOperacao caixaOperacao = new CaixaOperacao();
                caixaOperacao.CaixaId = int.Parse(dr["CaixaId"].ToString());
                caixaOperacao.CaixaOperacaoId = int.Parse(dr["CaixaOperacaoId"].ToString());
                caixaOperacao.DataAbertura = Convert.ToDateTime(dr["DataAbertura"].ToString());
                caixaOperacao.DataFechamento = Convert.ToDateTime(dr["DataFechamento"].ToString());
                caixaOperacao.UsuarioAberturaId = int.Parse(dr["UsuarioAberturaId"].ToString());
                caixaOperacao.PessoaId = int.Parse(dr["pessoaId"].ToString());
                caixaOperacao.ValorFechamento = Convert.ToDecimal(dr["ValorFechamento"].ToString());
                caixaOperacao.ValorInicial = Convert.ToDecimal(dr["ValorInicial"].ToString());
                caixaOperacao.Valorliquido = Convert.ToDecimal(dr["Valorliquido"].ToString());
                caixaOperacao.EventoId = Convert.ToInt16(dr["eventoId"].ToString());
                liCaixaOperacao.Add(caixaOperacao);
            }

            return liCaixaOperacao;
        }

        public string Inserir(CaixaOperacao _caixaOperacao)
        {
            SqlParameter[] paramsToSP = new SqlParameter[8];

            paramsToSP[0] = new SqlParameter("@CaixaId", _caixaOperacao.CaixaId);
            paramsToSP[1] = new SqlParameter("@DataAbertura", _caixaOperacao.DataAbertura);
            //paramsToSP[2] = new SqlParameter("@DataFechamento", _caixaOperacao.DataFechamento);
            paramsToSP[3] = new SqlParameter("@UsuarioAberturaId", _caixaOperacao.UsuarioAberturaId);
            paramsToSP[4] = new SqlParameter("@pessoaId", _caixaOperacao.PessoaId);
            paramsToSP[5] = new SqlParameter("@ValorFechamento", _caixaOperacao.ValorFechamento);
            paramsToSP[6] = new SqlParameter("@ValorInicial", _caixaOperacao.ValorInicial);
            paramsToSP[7] = new SqlParameter("@Valorliquido", _caixaOperacao.Valorliquido);
            paramsToSP[2] = new SqlParameter("@eventoid", _caixaOperacao.EventoId);

            try
            {
                string id = SqlHelper.ExecuteScalar(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_insert_caixa_operacao", paramsToSP).ToString();
                return id;

            }
            catch (Exception e)
            {
                throw new Exception("Erro ao inserir caixa operação, Erro: " + e.Message);
            }

        }

        public bool Alterar(CaixaOperacao _caixaOperacao)
        {
            SqlParameter[] paramsToSP = new SqlParameter[10];

            paramsToSP[0] = new SqlParameter("@CaixaId", _caixaOperacao.CaixaId);
            paramsToSP[1] = new SqlParameter("@DataAbertura", _caixaOperacao.DataAbertura);
            //paramsToSP[2] = new SqlParameter("@DataFechamento", _caixaOperacao.DataFechamento);
            paramsToSP[4] = new SqlParameter("@UsuarioAberturaId", _caixaOperacao.UsuarioAberturaId);
            paramsToSP[5] = new SqlParameter("@pessoaId", _caixaOperacao.PessoaId);
            paramsToSP[6] = new SqlParameter("@ValorFechamento", _caixaOperacao.ValorFechamento);
            paramsToSP[7] = new SqlParameter("@ValorInicial", _caixaOperacao.ValorInicial);
            paramsToSP[8] = new SqlParameter("@Valorliquido", _caixaOperacao.Valorliquido);
            paramsToSP[9] = new SqlParameter("@CaixaOperacaoId", _caixaOperacao.CaixaOperacaoId);
            paramsToSP[2] = new SqlParameter("@eventoid", _caixaOperacao.EventoId);


            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_update_caixa_operacao", paramsToSP);
                return true;
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao alterar caixa operação, Erro: " + e.Message);
            }

        }

        public bool Deletar(CaixaOperacao _caixaOperacao)
        {
            SqlParameter[] paramsToSP = new SqlParameter[1];

            paramsToSP[0] = new SqlParameter("@CaixaOperacaoId", _caixaOperacao.CaixaOperacaoId);

            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_delete_caixa_operacao", paramsToSP);
                return true;
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao deletar caixa operação, Erro: " + e.Message);
            }

        }

        public List<CaixaOperacao> Consultar(int _caixaOperacaoId)
        {
            string sqlQuery = string.Format("SELECT * FROM CAIXAOPERACAO WHERE CAIXAOPERACAOID = {0}", _caixaOperacaoId);

            try
            {
                return CarregarListaCaixaOperacao(SqlHelper.ExecuteReader(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.Text, sqlQuery));
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao consultar caixa operação, Erro: " + e.Message);
            }

        }

    }//class
}//namespace
